package org.dashboard.service;

import freemarker.cache.StringTemplateLoader;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateNotFoundException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * Copyright © 2018. All rights reserved.
 *
 * @Author: FreezeSoul
 * @CreateDate: 2018/8/13 11:08
 * @Description: TemplateService
 * @Version: V1.0
 */
@Component
public class TemplateService {


    @Autowired
    Configuration freemarkerConf;

    public Template createTemplate(String name, String templateContent) throws IOException {
        Template template = null;
        try {
            template = freemarkerConf.getTemplate(name, "utf-8");
        }catch (TemplateNotFoundException e){

        }
        if (template != null) {
            return template;
        }
        // 以下操作不是线程安全，要加上同步
        synchronized (this) {
            // 获取模板加载器
            TemplateLoader templateLoader = freemarkerConf.getTemplateLoader();
            if (templateLoader != null && templateLoader instanceof StringTemplateLoader) {
                // 如果加载器已经是字符串加载器，则在原来的加载器上put一个新的模板
                ((StringTemplateLoader) templateLoader).putTemplate(name, templateContent);
                freemarkerConf.setTemplateLoader(templateLoader);
            } else {
                // 如果原来的模板加载器不是字符串的（默认是文件加载器），则新建
                StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
                stringTemplateLoader.putTemplate(name, templateContent);
                freemarkerConf.setTemplateLoader(stringTemplateLoader);
            }
            // 这里要清一下缓存，不然下面可能会获取不到模板
            freemarkerConf.clearTemplateCache();
            template = freemarkerConf.getTemplate(name, "utf-8");

            return template;
        }
    }
}
